#ifndef _OS_LOG_H_
#define _OS_LOG_H_
#include <stdio.h>
#include "os_config.h"


#define  _LOG_LEVEL_  _OS_CONFIG_LOG_LEVEL
#define  _PRINTF_     _OS_CONFIG_LOG_OUTPUT_PORT

#ifndef _OS_CONFIG_USE_MCU_C51

    #define LOG_SYS_ERROR(format,...)    _PRINTF_("[***SYS_ERROR***]>>> "format"\n", ##__VA_ARGS__)
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 1))
        #define LOG_ERROR(format,...)    _PRINTF_("[***ERROR***]: [%s][%d]>>> "format"\n",__FILE__,__LINE__, ##__VA_ARGS__);while(1)
    #else
        #define LOG_ERROR(...)
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 2))
        #define LOG_WARNING(format,...)  _PRINTF_("[**WARNING**]: [%s][%d]>>> "format"\n",__FILE__,__LINE__, ##__VA_ARGS__)
    #else
        #define LOG_WARNING(...)
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_INFO(format,...)    _PRINTF_(format, ##__VA_ARGS__)
    #else
        #define LOG_INFO(...)
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_DEBUG(format,...)    _PRINTF_("[*DEBUG*]: [%s][%d]>>> "format"\n",__FILE__,__LINE__, ##__VA_ARGS__)
    #else
        #define LOG_DEBUG(format,...)
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_DEBUG_ARRAY(String,Array,Size)    { _PRINTF_("\n[*DEBUG*][%s][%d]\n%s HEX:",__FILE__,__LINE__,String);for(uint16_t i = 0;i < Size; i++){_PRINTF_("%02X ",Array[i]);}_PRINTF_("\n\n");}
    #else
        #define LOG_DEBUG_ARRAY(String,Array,Size)
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_DEBUG_ARRAY_BDC(String,Array,Size)    { _PRINTF_("\n[*DEBUG*][%s][%d]\n%s HEX:",__FILE__,__LINE__,String);for(uint16_t i = 0;i < Size; i++){_PRINTF_("%d ",Array[i]);}_PRINTF_("\n\n");}
    #else
        #define LOG_DEBUG_ARRAY(String,Array,Size)
    #endif

#else

    #define LOG_SYS_ERROR    _PRINTF_
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 1))
        #define LOG_ERROR    _PRINTF_
    #else
        #define LOG_ERROR
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 2))
        #define LOG_WARNING  _PRINTF_
    #else
        #define LOG_WARNING
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_INFO    _PRINTF_
    #else
        #define LOG_INFO
    #endif
    #if (_LOG_LEVEL_ && (_LOG_LEVEL_>= 3))
        #define LOG_DEBUG    _PRINTF_
    #else
        #define LOG_DEBUG
    #endif
#endif
#endif



